#include <REGX52.H>
#include "Delay.h"

sbit Trig=P2^0;	//触发信号引脚
sbit Echo=P2^1;	//输出回响信号引脚


/**
 * 函    数：定时器1初始化
 * 参    数：无
 * 返 回 值：无
 */
void Time0_Init()
{	
	TMOD = 0x01;	//设置定时器模式
	TL0=0;	//给定时器赋初值
	TH0=0;	//给定时器赋初值	
	TR0=0;	//定时器1 最初不计时
	
}


/**
 * 函    数：定时器1设置计数器值
 * 参    数：Value，要设置的计数器值，范围：0~65535
 * 返 回 值：无
 */
void Timer0_SetCounter(unsigned int Value)
{
	TH0=Value/256;
	TL0=Value%256;
}


/**
 * 函    数：定时器1获取计数器值
 * 参    数：无
 * 返 回 值：计数器值，范围：0~65535
 */
unsigned int Timer0_GetCounter(void)
{
	return (TH0<<8)|TL0;
}

/**
 * 函    数：定时器1启动停止控制
 * 参    数：Flag 启动停止标志，1为启动，0为停止
 * 返 回 值：无
 */
void Timer0_Run(unsigned char Flag)
{
	TR0=Flag;
}




/**
 * 函    数：HC-SR04开始测距
 * 参    数：无
 * 返 回 值：无
 */
int HC_SR04_MeasureDistance()
{	  
	int time=0;
	float dis=0;
	Echo=0;						//输出回响信号引脚置低电平 
	Trig=1;						//置高电平
	Delay_10us(2);				//保持10us以上，这里20us
	Trig=0;						//置低电平	 
	while(Echo==0);				//等待Echo高电平
	Timer0_SetCounter(0);		//定时器初始值为0	
	Timer0_Run(1);				//开启计时（等待HC_SR04_CallbackOut高电平）
	while(Echo==1);				//等待Echo低电平
	Timer0_Run(0);				//定时器停止运行
	time=Timer0_GetCounter();	//获取定时器高电平时长	
	dis=time*0.00034/2*1000;	//计算距离(换成毫米)
	return (int)dis;
} 


 
